#include "linear_transform.h"

namespace util {

  //
  // util::LinearTransform
  //

  LinearTransform::LinearTransform(qreal Scale_, qreal Offset_)
  : mScale(Scale_)
  , mOffset(Offset_)
  {
  }

  LinearTransform::LinearTransform(const std::pair<qreal, qreal> &Pt1_, const std::pair<qreal, qreal> &Pt2_)
  : mScale((Pt2_.second - Pt1_.second) / (Pt2_.first - Pt1_.first))
  , mOffset(Pt1_.second-mScale * Pt1_.first)
  {
  }

  qreal LinearTransform::GetOffset() const
  {
    return mOffset;
  }

  qreal LinearTransform::GetScale() const
  {
    return mScale;
  }

  LinearTransform LinearTransform::Invert() const
  {
    return LinearTransform(1 / mScale, -mOffset);
  }

  LinearTransform::result_type LinearTransform::operator()(argument_type Val_) const
  {
    return Val_ * mScale + mOffset;
  }

} // namesapce util